# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Jeff Bilyk <jbilyk@gmail.com>
# Contributor: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
#
# secfixes:
#   1.24.0-r12:
#     - CVE-2023-44487
#   1.22.1-r0:
#     - CVE-2022-41741
#     - CVE-2022-41742
#   1.20.2-r2:
#     - CVE-2021-46461
#     - CVE-2021-46462
#     - CVE-2021-46463
#     - CVE-2022-25139
#   1.20.1-r1:
#     - CVE-2021-3618
#   1.20.1-r0:
#     - CVE-2021-23017
#   1.16.1-r6:
#     - CVE-2019-20372
#   1.16.1-r0:
#     - CVE-2019-9511
#     - CVE-2019-9513
#     - CVE-2019-9516
#   1.14.1-r0:
#     - CVE-2018-16843
#     - CVE-2018-16844
#     - CVE-2018-16845
#   1.12.1-r0:
#     - CVE-2017-7529
#   0:
#     - CVE-2022-3638
#
pkgname=nginx
# NOTE: Upgrade only to even-numbered versions (e.g. 1.14.z, 1.16.z)!
# Odd-numbered versions are mainline (development) versions.
pkgver=1.24.0
pkgrel=14
# Revision of nginx-tests to use for check().
_tests_hgrev=22f45bf99a9e
_njs_ver=0.8.2
# if this isn't set higher than testing/openresty that comes first for some reason
# even though this has a higher version..
provider_priority=100
pkgdesc="HTTP and reverse proxy server (stable version)"
url="https://www.nginx.org/"
arch="all"
license="BSD-2-Clause"
makedepends="
	brotli-dev
	gd-dev
	geoip-dev
	hiredis-dev
	jansson-dev
	libmaxminddb-dev
	libxml2-dev
	libxslt-dev
	linux-headers
	openssl-dev>3
	pcre-dev
	perl-dev
	pkgconf
	zeromq-dev
	zlib-dev
	"
checkdepends="
	gd
	perl
	perl-fcgi
	perl-io-socket-ssl
	perl-net-ssleay
	perl-protocol-websocket
	tzdata
	uwsgi-python3
	"
pkgusers="nginx"
_grp_ngx="nginx"
_grp_www="www-data"
pkggroups="$_grp_ngx $_grp_www"
install="$pkgname.pre-install $pkgname.post-install $pkgname.pre-upgrade $pkgname.post-upgrade"
subpackages="$pkgname-debug $pkgname-doc $pkgname-openrc $pkgname-vim::noarch"
source="https://nginx.org/download/nginx-$pkgver.tar.gz
	CVE-2023-44487.patch
	$pkgname-tests-$_tests_hgrev.tar.gz::https://hg.nginx.org/nginx-tests/archive/$_tests_hgrev.tar.gz
	$pkgname-njs-$_njs_ver.tar.gz::https://hg.nginx.org/njs/archive/$_njs_ver.tar.gz
	nginx-dav-ext-module~pr-56.patch::https://github.com/arut/nginx-dav-ext-module/pull/56.patch
	nginx-dav-ext-module~pr-62.patch::https://github.com/arut/nginx-dav-ext-module/commit/bbf93f75ca58657fb0f8376b0898f854f13cef91.patch
	no-werror.patch
	traffic-accounting-nginx-module~disable-stream-module.patch
	traffic-accounting-nginx-module~fix-memory-leak.patch
	nginx_cookie_flag_module~fix-mem-allocations.patch
	njs~mktemp-busybox-compat.patch
	naxsi~assert.patch
	naxsi~ff-header.patch
	naxsi~compat.patch
	nginx-upload-progress-module~fix.patch
	nginx-upload-progress-module~fix-http2.patch
	ngx-fancyindex~fix-404-on-fs-root.patch
	ngx-fancyindex~fix-missing-saturday.patch
	lua-nginx-module~fix-handling-new-list-elements.patch
	lua-nginx-module~disable-http2-in-body-read.patch
	lua-nginx-module~fix-shdict-number.patch
	nchan~dont-fail-redis-cluster-before-consensus.patch
	nchan~fix-redis-race-condition.patch
	nginx-upload-module~fixes.patch
	nginx-upload-module~fix-nginx-compat.patch
	nginx.conf
	default.conf
	stream.conf
	$pkgname.logrotate
	$pkgname.initd
	$pkgname.confd
	"

_modules_dir="usr/lib/$pkgname/modules"
_stream_js_depends="$pkgname-mod-stream"

case "$CARCH" in
	ppc64le|riscv64) _has_luajit=false;;
	*) _has_luajit=true; makedepends="$makedepends luajit-dev";;
esac

case "$CARCH" in
	x86) _njs_mods= ;; # has failing tests
	*) _njs_mods="http-js stream-js";;
esac

# Built-in dynamic modules
for _mod in \
	http-geoip \
	http-image-filter \
	http-perl \
	http-xslt-filter \
	mail \
	stream \
	stream-geoip \
	$_njs_mods
do
	subpackages="$subpackages $pkgname-mod-$_mod:_module"
done

# Third-party dynamic modules

# For simplicity we assume that module is hosted on GitHub.
_add_module() {
	local name="$1" ver="$2" url="$3" subdir="$4" enabled="${5:-true}"
	local dirname=${url##*/}-${ver#v}
	local varprefix="_${name//-/_}"

	eval "${varprefix}_ver='$ver'; ${varprefix}_url='$url'"

	# Don't add new flag and source if it's already there, i.e. two or more
	# modules share the same source (e.g. geoip2 that provides http-geoip2
	# and stream-geoip2).
	local present=false
	case "$_extra_flags" in
		*="$srcdir/$dirname"*) present=true;;
	esac

	if ! $present; then
		source="$source $dirname.tar.gz::$url/archive/$ver.tar.gz"
		# $source must be always in-sync with $sha512sums, so we have to
		# add there source of a module that is disabled on the current arch.
		[ "$enabled" = false ] && return

		_extra_flags="$_extra_flags --add-dynamic-module=$srcdir/$dirname/$subdir"
	fi
	subpackages="$subpackages $pkgname-mod-$name:_module"
}

_add_module "devel-kit" "v0.3.3" "https://github.com/vision5/ngx_devel_kit"
_devel_kit_so="ndk_http_module.so"

_add_module "http-accounting" "v2.0" "https://github.com/Lax/traffic-accounting-nginx-module"

_add_module "http-array-var" "v0.06" "https://github.com/openresty/array-var-nginx-module"
_http_array_var_depends="$pkgname-mod-devel-kit"

_add_module "http-auth-jwt" "0.3.0" "https://github.com/kjdev/nginx-auth-jwt"
_http_auth_jwt_desc="Nginx third-party module kjdev/nginx-auth-jwt (version $_http_auth_jwt_ver)"

_add_module "http-brotli" "v1.0.0rc" "https://github.com/google/ngx_brotli"
_http_brotli_so="ngx_http_brotli_filter_module.so ngx_http_brotli_static_module.so"

_add_module "http-cache-purge" "2.5.3" "https://github.com/nginx-modules/ngx_cache_purge"

_add_module "http-cookie-flag" "v1.1.0" "https://github.com/AirisX/nginx_cookie_flag_module"
_http_cookie_flag_so="ngx_http_cookie_flag_filter_module.so"

_add_module "http-dav-ext" "v3.0.0" "https://github.com/arut/nginx-dav-ext-module"

_add_module "http-echo" "v0.63" "https://github.com/openresty/echo-nginx-module"

_add_module "http-encrypted-session" "v0.09" "https://github.com/openresty/encrypted-session-nginx-module"
_http_encrypted_session_depends="$pkgname-mod-devel-kit"

_add_module "http-fancyindex" "v0.5.2" "https://github.com/aperezdc/ngx-fancyindex"

_add_module "http-geoip2" "3.4" "https://github.com/leev/ngx_http_geoip2_module"
_add_module "stream-geoip2" "3.4" "https://github.com/leev/ngx_http_geoip2_module"
_stream_geoip2_depends="$pkgname-mod-stream"

_add_module "http-headers-more" "v0.35" "https://github.com/openresty/headers-more-nginx-module"
_http_headers_more_so="ngx_http_headers_more_filter_module.so"

_add_module "http-keyval" "0.2.0" "https://github.com/kjdev/nginx-keyval"

_add_module "http-log-zmq" "v1.0.0" "https://github.com/danifbento/nginx-log-zmq"

# luajit is required for lua-nginx-module since v0.10.14
_add_module "http-lua" "v0.10.25" "https://github.com/openresty/lua-nginx-module" "" "$_has_luajit"
_http_lua_depends="$pkgname-mod-devel-kit lua-resty-core"
_http_lua_provides="$pkgname-lua"  # for backward compatibility

_add_module "http-lua-upstream" "v0.07" "https://github.com/openresty/lua-upstream-nginx-module" "" "$_has_luajit"
_http_lua_upstream_depends="$pkgname-mod-http-lua"

_add_module "http-naxsi" "1.3" "https://github.com/nbs-system/naxsi" "naxsi_src"
_naxsi_provides="$pkgname-naxsi"  # for backward compatibility

_add_module "http-nchan" "v1.3.6" "https://github.com/slact/nchan"
_http_nchan_so="ngx_nchan_module.so"

_add_module "http-redis2" "v0.15" "https://github.com/openresty/redis2-nginx-module"

_add_module "http-set-misc" "v0.33" "https://github.com/openresty/set-misc-nginx-module"
_http_set_misc_depends="$pkgname-mod-devel-kit"

_add_module "http-shibboleth" "v2.0.2" "https://github.com/nginx-shib/nginx-http-shibboleth"

_add_module "http-untar" "v1.1" "https://github.com/ajax16384/ngx_http_untar_module"

_add_module "http-upload" "2.3.0" "https://github.com/fdintino/nginx-upload-module"

_add_module "http-upload-progress" "v0.9.2" "https://github.com/masterzen/nginx-upload-progress-module"
_http_upload_progress_so="ngx_http_uploadprogress_module.so"

_add_module "http-upstream-fair" "0.1.3" "https://github.com/itoffshore/nginx-upstream-fair"

_add_module "http-upstream-jdomain" "1.4.0" "https://github.com/nicholaschiasson/ngx_upstream_jdomain"

_add_module "http-vod" "1.32" "https://github.com/kaltura/nginx-vod-module"

_add_module "http-vts" "v0.2.2" "https://github.com/vozlt/nginx-module-vts"
_http_vts_so="ngx_http_vhost_traffic_status_module.so"

_add_module "http-zip" "1.3.0" "https://github.com/evanmiller/mod_zip"

_add_module "rtmp" "v1.2.2" "https://github.com/arut/nginx-rtmp-module"
_rtmp_provides="$pkgname-rtmp"  # for backward compatibility

prepare() {
	local file; for file in $source; do
		file=${file%%::*}

		case $file in
		*~*.patch)
			msg $file
			cd "$srcdir"/${file%%~*}-*
			patch -p 1 -i "$srcdir/$file"
			;;
		*.patch)
			msg $file
			cd "$builddir"
			patch -p 1 -i "$srcdir/$file"
			;;
		esac
	done

	# This test requires superuser privileges and CAP_NET_ADMIN.
	rm "$srcdir"/nginx-tests-*/proxy_bind_transparent.t
	rm "$srcdir"/nginx-tests-*/proxy_bind_transparent_capability.t
	# Travis and Drone.io does not support IPv6...
	rm -f "$srcdir"/nginx-tests-*/upstream_ip_hash_ipv6.t
}

_build() {
	if $_has_luajit; then
		export LUAJIT_LIB="$(pkgconf --variable=libdir luajit)"
		export LUAJIT_INC="$(pkgconf --variable=includedir luajit)"
	fi

	# Fix compilation with gcc 13.1.
	# TODO: Remove after upgrade to njs 0.7.13.
	#   https://github.com/nginx/njs/commit/e60d10f2007c332391d7a104453e13567ebbe52d
	export NJS_CFLAGS="-Wno-error=dangling-pointer"

	# Enable support for Redis store in the http-keyval module.
	export NGX_HTTP_KEYVAL_ZONE_REDIS=1

	# --without-pcre2 - Lua module is not compatible with PCRE2 yet
	#   https://github.com/openresty/lua-nginx-module/issues/1984
	./configure \
		--prefix=/var/lib/$pkgname \
		--sbin-path=/usr/sbin/$pkgname \
		--modules-path=/$_modules_dir \
		--conf-path=/etc/$pkgname/$pkgname.conf \
		--pid-path=/run/$pkgname/$pkgname.pid \
		--lock-path=/run/$pkgname/$pkgname.lock \
		--http-client-body-temp-path=/var/lib/$pkgname/tmp/client_body \
		--http-proxy-temp-path=/var/lib/$pkgname/tmp/proxy \
		--http-fastcgi-temp-path=/var/lib/$pkgname/tmp/fastcgi \
		--http-uwsgi-temp-path=/var/lib/$pkgname/tmp/uwsgi \
		--http-scgi-temp-path=/var/lib/$pkgname/tmp/scgi \
		--with-perl_modules_path=/usr/lib/perl5/vendor_perl \
		\
		--user=$pkgusers \
		--group=$_grp_ngx \
		--with-threads \
		--with-file-aio \
		\
		--without-pcre2 \
		\
		--with-http_ssl_module \
		--with-http_v2_module \
		--with-http_realip_module \
		--with-http_addition_module \
		--with-http_xslt_module=dynamic \
		--with-http_image_filter_module=dynamic \
		--with-http_geoip_module=dynamic \
		--with-http_sub_module \
		--with-http_dav_module \
		--with-http_flv_module \
		--with-http_mp4_module \
		--with-http_gunzip_module \
		--with-http_gzip_static_module \
		--with-http_auth_request_module \
		--with-http_random_index_module \
		--with-http_secure_link_module \
		--with-http_degradation_module \
		--with-http_slice_module \
		--with-http_stub_status_module \
		--with-http_perl_module=dynamic \
		--with-mail=dynamic \
		--with-mail_ssl_module \
		--with-stream=dynamic \
		--with-stream_ssl_module \
		--with-stream_realip_module \
		--with-stream_geoip_module=dynamic \
		--with-stream_ssl_preread_module \
		\
		${_njs_mods:+"--add-dynamic-module=$srcdir/njs-$_njs_ver/nginx"} \
		$_extra_flags \
		"$@"

	make
}

build() {
	_build --with-debug
	mv objs objs-debug

	make clean
	_build
}

check() {
	msg "Running nginx tests..."
	cd "$srcdir"/nginx-tests-*

	case "$CARCH" in
	mips*)
		# Sporadic failure on builder.
		rm ssl.t
		;;
	esac

	: ${JOBS:-1}
	TEST_NGINX_BINARY="$builddir/objs/nginx" prove -j $((JOBS > 20 ? 20 : JOBS)) .

	# FIXME: see !46437
	#if [ -n "$_njs_mods" ]; then
	#	msg "Running njs tests..."
	#	cd "$srcdir"/njs-*
	#	make test
	#fi
}

package() {
	make DESTDIR="$pkgdir" install
	chown root:root "$pkgdir"/usr/sbin/nginx

	install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
	install -Dm644 README "$pkgdir"/usr/share/doc/$pkgname/README

	install -Dm644 objs/$pkgname.8 "$pkgdir"/usr/share/man/man8/$pkgname.8

	local name; for name in ngx_devel_kit nginx-rtmp-module; do
		cp -r "$srcdir"/$name-*/doc* "$pkgdir"/usr/share/doc/$pkgname/$name
	done
	if $_has_luajit; then
		cp -r "$srcdir"/lua-nginx-module-*/doc* "$pkgdir"/usr/share/doc/$pkgname/lua-nginx-module
	fi

	cd "$pkgdir"

	install -Dm644 "$srcdir"/nginx.conf ./etc/$pkgname/nginx.conf
	install -dm755 ./etc/$pkgname/http.d ./etc/$pkgname/modules

	install -Dm755 "$srcdir"/$pkgname.initd ./etc/init.d/$pkgname
	install -Dm644 "$srcdir"/$pkgname.confd ./etc/conf.d/$pkgname
	install -Dm644 "$srcdir"/$pkgname.logrotate ./etc/logrotate.d/$pkgname

	install -dm750 -o $pkgusers -g $_grp_ngx ./var/lib/$pkgname
	install -dm700 -o $pkgusers -g $_grp_ngx ./var/lib/$pkgname/tmp
	install -dm755 -g $_grp_www ./var/www/localhost/htdocs

	install -Dm644 "$srcdir"/default.conf ./usr/share/$pkgname/http-default_server.conf

	install -dm755 ./var/log
	mv ./var/lib/$pkgname/logs ./var/log/$pkgname
	chown $pkgusers:$_grp_ngx var/log/$pkgname

	ln -sf /$_modules_dir ./var/lib/$pkgname/modules
	ln -sf /var/log/$pkgname ./var/lib/$pkgname/logs
	ln -sf /run/$pkgname ./var/lib/$pkgname/run

	# Remove archaic charset maps.
	rm ./etc/$pkgname/koi-* ./etc/$pkgname/win-utf

	rm -rf ./run ./etc/$pkgname/*.default
}

# http://nginx.org/en/docs/debugging_log.html
debug() {
	pkgdesc="nginx built with support for debugging log"
	depends="$pkgname=$pkgver-r$pkgrel"
	options="!strip"

	install -Dm755 "$builddir"/objs-debug/nginx "$subpkgdir"/usr/sbin/nginx-debug
}

vim() {
	pkgdesc="$pkgdesc (vim syntax)"
	install_if="vim $pkgname=$pkgver-r$pkgrel"
	depends=

	mkdir -p "$subpkgdir"/usr/share/vim
	cp -r "$builddir"/contrib/vim "$subpkgdir"/usr/share/vim/vimfiles
}

_module() {
	local name="${subpkgname#$pkgname-mod-}"; name="${name//-/_}"
	local ver=$(getvar _${name}_ver)

	pkgdesc="Nginx module ${name//_/-}"
	[ "$ver" ] && pkgdesc="Nginx third-party module ${name//_/-} (version $ver)"

	pkgdesc="$(getvar "_${name}_desc" "$pkgdesc")"
	url=$(getvar "_${name}_url" "$url")
	sonames=$(getvar "_${name}_so" "ngx_${name}_module.so")
	depends="$pkgname $(getvar "_${name}_depends")"
	provides=$(getvar "_${name}_provides")

	# Numeric prefix for the module config to ensure that modules with
	# dependencies on other modules will be loaded after their dependencies.
	# For simplicity, we don't actually resolve dependency tree. Instead,
	# we just prefix the module name with a number that reflects number of
	# the module's dependencies times ten (e.g. 10, 20, 30, ...).
	local conf_prefix="$(echo "$depends" | wc -w)0_"

	mkdir -p "$subpkgdir"/$_modules_dir
	mkdir -p "$subpkgdir"/etc/nginx/modules

	cd "$subpkgdir"

	local soname; for soname in $sonames; do
		mv "$pkgdir"/$_modules_dir/$soname ./$_modules_dir/$soname
		echo "load_module \"modules/$soname\";" >> ./etc/nginx/modules/${conf_prefix}$name.conf
	done

	case "$name" in
		http_perl)
			mv "$pkgdir"/usr/lib/perl5 "$subpkgdir"/usr/lib/
		;;
		http_naxsi)
			install -m644 -D "$srcdir"/naxsi-*/naxsi_config/naxsi_core.rules \
				./etc/nginx/naxsi_core.rules
		;;
		stream)
			mkdir -p ./etc/nginx/stream.d
			install -m644 -D "$srcdir"/stream.conf ./etc/nginx/conf.d/stream.conf
		;;
	esac
}

# Print value of the specified variable, or the default if empty or not defined.
getvar() {
	eval "printf '%s\n' \"\${$1:-$2}\""
}

sha512sums="
1114e37de5664a8109c99cfb2faa1f42ff8ac63c932bcf3780d645e5ed32c0b2ac446f80305b4465994c8f9430604968e176ae464fd80f632d1cb2c8f6007ff3  nginx-1.24.0.tar.gz
18b69643648119dfab45101bb9404be667aeb9d550aa3bc9706e63e7da1c2806106e9a6bbfb2d10bd57ef56b9b5b0b524059353ec30a51469b44641cb7dbd8a6  CVE-2023-44487.patch
d882d7f79814bd5caf323099aef318a5f4c75c2eb81f13bbd9688fd5404f5a2e4dc653dbc23121f77cc5ccf59742f80fb34db38b8788030c54b376eb9a2065ff  nginx-tests-22f45bf99a9e.tar.gz
cc3110a0c6866dfc03d19c58745e5b75aa9792999db45bc55a752f7b04db8ae51322bfe0156b873109c8477c6c1a030c851c770697cf6791c6e89fb2fed0a2c5  nginx-njs-0.8.2.tar.gz
4c7a94aaebbb69599b0067e74f9f3db54ec383ca9499292fec5b875bb0b5859aa11dc14cef5664c94dd54aba231f31e85feacddc49f7622aa4d0fdb38709b6e1  nginx-dav-ext-module~pr-56.patch
fdd66e433126e194a3ef22737993191a04fcc4c8caa044b27cb22bea0e7f16c8fdbc900553507d2bb541cdb82b542845a297db2a48c2460a38dd772d0ebfca9d  nginx-dav-ext-module~pr-62.patch
c89fab6d3d4226e37f2a8d2122d825046fc9a787e464fc75351a19fbda5b47016ddb907e0a61241a007304af921e11a0715895ba7b6d4c1112afe816177ed02a  no-werror.patch
09ec9f18323197eafa55ff68e8c836ad3dd830e6cd3bd4aeaf34e179ef3f72f734a0117288c1c58813aff59f3f1f0f29ccd772a672e17551e7a4fd0693a89c92  traffic-accounting-nginx-module~disable-stream-module.patch
5a7e72fc6ade460b725e6b91d5eafeb2792ad9832fbdb84ed868bd9a25d43116e42877df587b5f3885a1e38769f072ed4e8605393aca672d61bc71dd106d392b  traffic-accounting-nginx-module~fix-memory-leak.patch
ac0f912ae90e0083cc761a622290223edeed0bd32213bbe766d637ac2dfd9835d163e5d16ef28740cbad05d6d92cc418d62df3413c70b4f2c63db02f8ca1c7cc  nginx_cookie_flag_module~fix-mem-allocations.patch
4db527d663dbe9e8b503c3cbaa4eae34b45990a5359b3bb98ce970c705faefcac98de49439f2557756a2be8e2e06acc67f98942de01674c498832d80c3cb90c3  njs~mktemp-busybox-compat.patch
eee45b82a594c4dfa5eecf94cf14cd247bd1dd7d627aa0a26666828b3e2da1a358da251a23f0b5feeb5f95f6ba205af6ead54c1e6bcb67f6d11149c0580de3af  naxsi~assert.patch
7c35f51d73b6c20b6b9b030e76a4898752eae38e0f8e4001286a93633f0b1b11c39fd883116d86a323338027766d15d99c824a9cd9ffe934bea80b7af2a3070c  naxsi~ff-header.patch
3e000d58e1259a656bb49af23623e6542ec994e3fe699e0005afde9ded5d505e7a174b206390b55ef639e53fd47516a86d88de675df86d550808da1d2732e683  naxsi~compat.patch
745e900573bc4d1ca6dd40da4743387f9ffaa764cca59591fcbfb1afe67980e529184f81a7cf8f047ddd1962a6a26ed65f1589d69a4f63f6f5701549f38a0652  nginx-upload-progress-module~fix.patch
24bcde151301ed41eaea65c3792219b25dbb76e3eddd74064937038326698b83d6620d2515a954984502ad2a1c6c53843680952c2ce813f2da34652047675ddf  nginx-upload-progress-module~fix-http2.patch
37ad4288684d8918045d406f9f46510211413ab343e47aa149e52fd773ad95e6ff10a1b4e7cdd60acaf9231a0c6a935ab489c25880444f1a79e8624693fa166e  ngx-fancyindex~fix-404-on-fs-root.patch
d54eb2152b2ddbf3e8956cb7b4634b1657635b21b9b4f91309d45a43553c9506ad70161d265e0840c1e84c9e04c0e89061600176ad2ec39311b5c0ce75e42f1e  ngx-fancyindex~fix-missing-saturday.patch
99804144cfc0baebe384b900de28fd07f72ddb44390e47c204dd5fa2ecd8d76cc6ee9610ab83dcfce36671492ba8d1025ed87bb271d46b7a766f96ccdb2c4983  lua-nginx-module~fix-handling-new-list-elements.patch
2ba3c89af2b7e725a988f0e573e7957e9b5d4cc1b82d7cefa63ccff18364de830c3443b84360bad212b37a354238e9c0d996099c6f8f8e702585eaedd94c2a47  lua-nginx-module~disable-http2-in-body-read.patch
00e1265b7e7106dbd5678316ec82a6d3c540fe8a2becbd7f9135697d0f175d5592323e0ea06a988ff99722a960e3435a8be989d11e1cf13738d7d8cb3f08653c  lua-nginx-module~fix-shdict-number.patch
abda15727e34178db2f8013a1c47e480ba323a3b3b88a44bbada0169b8ce66743911ec7b551272fc8540199070b62eadc78a19989f770794b43877c6743f573d  nchan~dont-fail-redis-cluster-before-consensus.patch
2a87aee322a146a55e58d48636cdb6a3a182c308a6fe5327c9c2ece0487f669fe6b3f231f56e395e12b7c2ae2dd929a72a03dc18b1032ccc733184aac50d2381  nchan~fix-redis-race-condition.patch
ef57603bd65ffbbb216fd748dab0126d3df7aafdfa70dce0ea9ef91373df95269546ec2fcaa03f842a8db3a16879274184a23b18db17b4f9be3916aedacb7765  nginx-upload-module~fixes.patch
bae6c3153810bf6f460248668f2c48e332aba37081e25e45a1691344508530ef1be9acee4d52f506cb09510c4fce8d93ca3178ba45af771c54e37126f4f11b1b  nginx-upload-module~fix-nginx-compat.patch
f6f44b8f17d079ef4db4fc0507672e7aaa6b93cbae10f24c91232f089a8b7a0c2db92a148b2a16b1992cdcdcad3b686146f9b8e955693a50982dd8aa04f54b2d  nginx.conf
0907f69dc2d3dc1bad3a04fb6673f741f1a8be964e22b306ef9ae2f8e736e1f5733a8884bfe54f3553fff5132a0e5336716250f54272c3fec2177d6ba16986f3  default.conf
426f0c317322af7cab152f2070398c7aa5c059276ba504617a212f1e060bbb1dd9edc54e62d4cf5f14e3678235351c808ebeabe8b122757c74b3f505e8427106  stream.conf
09b110693e3f4377349ccea3c43cb8199c8579ee351eae34283299be99fdf764b0c1bddd552e13e4d671b194501618b29c822e1ad53b34101a73a63954363dbb  nginx.logrotate
ee10a5687740dde0c3d18d8b3555f49fcdc6abfc0a3bc2de1de3be0e99951a346fe8027d916aab73071ecd4e2c50871e7c867aca3a7a0fd16e3374c5caed1c57  nginx.initd
0b9b9ed01ac077e334c034faa2679f6e26740fb3362eebf8cef82d22b2af2a3faaa53bae3c9e14af51cbf64720a7c66431905ca5cc43f978366456cc4e3b7f4a  nginx.confd
a255e3a4a9b902b3e15140dc88bbbb152b0a9cdc64604152de41e1b254e81aa2a1e2c95c06cb4905c1520886acf9070031d63913b53fe98b034f8adad2bccf61  ngx_devel_kit-0.3.3.tar.gz
0df34c3765e18dc5cc5a053d3a17dbee17a686a1f6e76ad057c262741c4e4465c66bcef86e627a19258f836cad5f14745bf046fd396b00960ad79ed20c2a07bb  traffic-accounting-nginx-module-2.0.tar.gz
bc72158856a1be18a26ee04c6b5b0f0a20bcce688610a493bf31e2a133e7eb12e11f7c18197a09a72b1513f6a08348ee5281b9d5b84cf43603539040ebd23c26  array-var-nginx-module-0.06.tar.gz
a02ef958ee6c17ab96e8477e3e74e94d05e22f3c1322192474e05129ad8b6dabc849eb59060b5cd0ad6a9c0b05859c59c876008a506e79ea54af56897986c8e1  nginx-auth-jwt-0.3.0.tar.gz
05a880d5e48ac83be84498ed41fb4750211b827a9d7541acfd6ef494e5205a6e853d5594bfec3ab4ae668ea3f803e4f4b0ba550c76811971c8e266e42663c56d  ngx_brotli-1.0.0rc.tar.gz
aebc9b19a3e7dda3b57e6bd6d86a5ab66d25e05cf5c6c99c71234c789700eb9da8e29529b8b2abf3d775ff3c2610e695fc88e647738769f0d3730bcafc3be38b  ngx_cache_purge-2.5.3.tar.gz
352cc3d033cc67ee34209f958dac13ada2147de429f4dd3da301c865d52970d80c8aa3c193f7fb28cf4854b88baff07b6efc3bae1fb813fe53d5956a87dfc81a  nginx_cookie_flag_module-1.1.0.tar.gz
d0193ba90f1ef46c4e470630c4394bdf99d94fd2e3bd8be6cb2ba1655ec59944b1269025f032b79dc2c6dad366e54389ef6a6da2ddeb91d535a4027f2162fbde  nginx-dav-ext-module-3.0.0.tar.gz
c325ac4e3f3f735739e156d8c7ada503b34475c62533b4830231ff1b42c25cb0c841aae06b3448b589c2ab35da8d211436ed194d6fd062cad925af8152c5e789  echo-nginx-module-0.63.tar.gz
399ce2690e85ee27802e8031954a1a3aa3fdc9246e17323a72a298d235931a8dbebdcb121ac8788e074872df0ef5b5a8a3d512b17fbe860b38f696ce42de3655  encrypted-session-nginx-module-0.09.tar.gz
c208cdf3e245527d7b313f9ef1f5d36ca26e3bdafe67df56492a13b7726587538665e5d9fd50f295fc933f218dc33394f2fe442713d15631701dbfc4a156799b  ngx-fancyindex-0.5.2.tar.gz
18dea21e5ae2647bea1fc448058a1b773c936917245edef8d861d5e23ed92e9a3b1ec4ef43ffb2ece7b5899d787910adcf4fbd39f84d7e8d7c54759e2fee5b72  ngx_http_geoip2_module-3.4.tar.gz
75f478cd3fcf5476cf20f5a5e0f9eb1bead619bd717de3cf83fb9e3c7d2e47b535f2d2a671887eeb54d771d79f6c87e49d92c4c1d2aa9975aa8afcab65ad197b  headers-more-nginx-module-0.35.tar.gz
45b8f107a492f415f5053b9b95d3dad481d5736c603b87c1342541214e89b9acbe37925f93acc396782406232e607879b52f9bb480f9021c10d405b832298022  nginx-keyval-0.2.0.tar.gz
015a358d987476bb61302fbbe1cb105f5314edc1a8b7ee6310aae697f755c79fcb1834ff561fced054c8cd5624f5387fcc1de729731ccd70662f2eb72bcdc174  nginx-log-zmq-1.0.0.tar.gz
01943f2b789b4e385592707f2769a5f4da668415ef9bd0c5263face2fb4146a28137fb8ab8b55056240dad034780601b7966913951cc0c77f4b3aa9eab50ae40  lua-nginx-module-0.10.25.tar.gz
72887c4490854b099cb26bb3f840073a36b0d812bde4486f04dc1be182ca74f0d1e3fd709e77c240c2dcf37665f74cf04e188ea9efe8e127c6789b27b487d0cd  lua-upstream-nginx-module-0.07.tar.gz
d7aac69b5eceeb1b0db4741201159ade1e0e7f6f7c3e8c4afa2f8959c6c00c3b5285d5185747c2fb0b1400efda02e96799836315e7e492bb4a059b14acb2142d  naxsi-1.3.tar.gz
0f1c25d460dcf4e3407a1ef4bfcefe17eba7b0ff250f267e5bde0eb4298e9596c1e6992fc58fe35d8420888065353bf3883a1f1bbc5e607a00128992eb1ee6d2  nchan-1.3.6.tar.gz
d6ca250db8de93edbd7875afca35e73cecdaf82132d1a7ee933cf94c6b8afa8e629e9e647a9321f2bc1fbb92137ec0d32dcd89b82ac5fae31e342537fb7e0431  redis2-nginx-module-0.15.tar.gz
1ff4c947538a5bd5f9d6adcd87b37f2702f5cc90e3342bc08359cbe8f290b705a3a2daa3dedfb1df3ce4bc19478c8fcac07081c4a53a804fc2862d50078278dc  set-misc-nginx-module-0.33.tar.gz
0f0c5167e999ffad0caa816d4b7d0a121f0598d578391834fe3293a3e023453d91b36ffc32a431ff3af3f9f376d2d78703998560094d20643b4049c2fec84bda  nginx-http-shibboleth-2.0.2.tar.gz
c3a7dd29c4a4e47d396b19622a290a04d4cceb97c1b8a508bc984eb8c81d17da4bf5789514bb996987f8343bc801ee4457a86a274bde98b49a809afdfc04cbde  ngx_http_untar_module-1.1.tar.gz
a0da355888398f86a6b5d065e58c05f9e057589ee785be9f515d77d7a020ae5a7b0656f5af30fb3b026f457326db2e26f4fed29026221ec5fc8156ef8586da25  nginx-upload-module-2.3.0.tar.gz
c31c46344d49704389722325a041b9cd170fa290acefe92cfc572c07f711cd3039de78f28df48ca7dcb79b2e4bbe442580aaaf4d92883fd3a14bf41d66dd9d8c  nginx-upload-progress-module-0.9.2.tar.gz
8adb7453c27748f4e685e3352e9b318b408da818754dc5b6244e908423941a8ba337561104f6e481f2553cbc0e334dcea73b57f8e810a9d6e974bb69ff8859e5  nginx-upstream-fair-0.1.3.tar.gz
bbf3f4808f17fa797fa0c27bc1351098aa5d6b5d227376a0ab01b4f424942ec5ad9f5c09c7af284345988b119268bf579b24065fb6bc6bc2f2b2392e918f09bc  ngx_upstream_jdomain-1.4.0.tar.gz
c80ad088dc9029b328abd471ca5b869a0d1633748d62a1b953cad553969acb3d85579357c3001230cb956030f0f820b8e6ade8ca59ba6208d49a335788ea8798  nginx-vod-module-1.32.tar.gz
7295c1af3267b067793fb88e3d3a74fdba5187742141d447f597b8d726c455bfb163209eca5d00b00a57adc3f627078b404a43f5318f910a68c6aeaffb189b1c  nginx-module-vts-0.2.2.tar.gz
8c5dda14da06ef776fe2b496c2f1b80d2c25c9269309aa560a006c369044c52917024a90f897b7212b2409a874bf2e0a3ab2dbc1e10ad84fa64f54f1f4df3d0d  mod_zip-1.3.0.tar.gz
3f8c803221854c4b1a06aadc6313fbfec74bd7179c0ee51d4365b26ffa8875881a6e1e48f777a9c9efbb9170ab7478a82920d5448a2c2df485503d37bb03ab81  nginx-rtmp-module-1.2.2.tar.gz
"
